阶乘约数

题目 阶乘约数

image-b41d77d8

思路分析

约数个数

100的阶乘是1乘到100 那么这些数就都是约数

那么就可以直接用这些约数做质因数分解 利用公式

把一个数N 写成:N = (p1^x1)(p^x2)(p3^x3)…(pk^xk),其中pi为质数

则N的约数个数为:(x1+1)(x2+1)(x3+1)…(xk+1)

直接算出约数个数

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'

unordered_map<int,int> Weight;

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	for(int i=1;i<=100;i++){
		int x=i;
		for(int j=2;j<=x/j;j++){
			while(x%j==0){
				Weight[j]++;
				x/=j;
			}
		}
		if(x>1)
			Weight[x]++;
	}
	long long res=1;
	for(auto x:Weight)
		res*=x.second+1;
	cout<<res;
	return 0;
 }

或者用更暴力的方法 把100的阶乘算出来 再把它的所有约数求出来 放在set里面 看set大小

但是100的阶乘根本存不下 考虑用py写

def factorial(n):

    if n == 0 or n == 1:

        return 1

    else:

        return n * factorial(n-1)

def find_divisors(n):

    divisors = set()

    for i in range(1, int(n**0.5) + 1):

        if n % i == 0:

            divisors.add(i)

            divisors.add(n // i)

    return divisors

# 计算 100 的阶乘

fact_100 = factorial(100)

# 找到所有因子

divisors = find_divisors(fact_100)

# 打印因子数量

print(len(divisors))

代码实现


同类题型

视频讲解


⬅️ 扩散 🏠 00-冲刺国赛 ➡️ 玩具蛇